package com.zjj.learn.algorithmPlus.segment1.deque;

/**
 * 双端队列的接口定义
 * 双端队列表示可以从队列头部或者尾部添加数据和删除数据
 *
 * @author zjj_admin
 */
public interface Deque<E> {

    /**
     * 从队列头部添加一个元素
     *
     * @param value
     * @return
     */
    boolean offerFirst(E value);

    /**
     * 从队列尾部添加一个元素
     *
     * @param value
     * @return
     */
    boolean offerLast(E value);

    /**
     * 移除并返回队列头部元素
     *
     * @return
     */
    E pollFirst();

    /**
     * 移除并返回队列尾部元素
     *
     * @return
     */
    E pollLast();

    /**
     * 查看队列头部元素
     *
     * @return
     */
    E peekFirst();

    /**
     * 查看队列尾部元素
     *
     * @return
     */
    E peekLast();

    /**
     * 队列是否为空
     *
     * @return
     */
    boolean isEmpty();

    /**
     * 队列是否满了
     *
     * @return
     */
    boolean isFull();

    /**
     * 队列元素个数
     *
     * @return
     */
    int size();

}
